▪在前一篇,我們將 效能測試整合至 CI Pipeline(GitHub Actions),並利用 Locust 產出壓測報表。到目前為止,已經涵蓋了 單元測試、整合測試、效能測試 三個層面,確保程式碼的正確性與效能品質。
▪接下來要邁向 CD(Continuous Deployment),第一步就是要讓專案可以被 容器化(Containerization)。容器化的好處是環境一致,開發環境、測試環境、正式環境都能共用同一套基礎映像檔,減少「我本機沒問題」的窘境。
今天的目標,就是帶大家完成專案的 Docker 映像檔建立。
1.撰寫一份 Dockerfile
2.建立對應的 requirements.txt
3.使用 Docker 指令將專案打包成映像檔
4.啟動容器並檢視 API 成果
python -m venv .venv(建立虛擬環境)
source .venv/bin/activate(進入虛擬環境)
pip install -r requirements.txt
from fastapi import FastAPI
app = FastAPI(
openapi_url="/api/v1/openapi.json",
docs_url="/api/v1/docs",
redoc_url="/api/v1/redoc",
)
@app.get("/")
def root():
return {"message": "Hello from Docker!"}
fastapi
uvicorn[standard]
# 使用官方 Python 3.12 輕量版基底映像
FROM python:3.12-slim
# 設定容器內的工作目錄為 /app
WORKDIR /app
# 先複製 requirements.txt 進去,方便利用快取分層
COPY requirements.txt .
# 安裝 Python 套件,--no-cache-dir 避免快取佔空間
RUN pip install --no-cache-dir -r requirements.txt
# 再把專案程式碼複製進去(避免每次修改程式都重裝套件)
COPY . .
# 對外開放 8000 port(FastAPI 預設使用)
EXPOSE 8000
# 容器啟動後要執行的指令:用 uvicorn 啟動 FastAPI 應用
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# Python 編譯後快取檔案
__pycache__/
*.pyc
*.pyo
*.pyd
# 虛擬環境(本機使用,不需要打包進容器)
.venv/
# 環境變數檔(通常含敏感資訊,不應放進 image)
.env
# Git 相關檔案(.git 資料夾通常很大,只在版本控制需要,容器內沒必要)
.git
docker build -t fastapi-app .
docker run --rm -p 8000:8000 fastapi-app
▪ 啟動容器,退出後自動刪除(--rm:開發及測試階段適用)
▪ URL : http://localhost:8000/
▪ URL(Swagger UI) : http://localhost:8000/api/v1/docs
今天我們學會了如何:
▪撰寫 Dockerfile
▪使用 docker build 建立映像檔
▪使用 docker run 啟動容器並測試 API
這是邁向 CD 的第一步,讓專案能夠被「打包」成獨立的環境。
下一篇👉我們會把映像檔帶到 Kubernetes,並介紹如何進行部署與擴展,讓應用程式真正能跑在雲端叢集上。